import os
import lasio
from PySide6.QtWidgets import QFileDialog, QCheckBox

def uploadFile(parent):
    filePath, _ = QFileDialog.getOpenFileName(parent,'选择LAS文件', '', 'LAS文件(*.las)')
    if not filePath:
        return  # 如果用户取消了文件选择，则直接返回

    uploadAFile(parent,filePath)

#上传路径为filePath的las文件
def uploadAFile(parent,filePath):
    fileName=os.path.basename(filePath)
    las = lasio.read(filePath)
    print("上传文件")
    # 设置主窗口类成员变量
    parent.currentFileName = fileName
    parent.currentFilePath = filePath
    parent.curves=las.curves.keys()
    parent.las = las

    # 文件列表下拉框新增条目
    refreshFilelist(parent, filePath)

    # 展示头部信息
    showHeader(parent, las)

    n=set_checkboxes(parent)
    parent.curvesItemCnt=int(n)

    return las

# 和uploadAFile的区别是，不在下拉框中新增条目
def reSelectFile(parent,filePath):
    fileName = os.path.basename(filePath)
    las = lasio.read(filePath)
    print("重新选择文件")
    # 设置主窗口类成员变量
    parent.currentFileName = fileName
    parent.currentFilePath = filePath
    parent.curves = las.curves.keys()
    parent.las = las

    # 展示头部信息
    showHeader(parent, las)

    n=set_checkboxes(parent)
    parent.curvesItemCnt = int(n)

#设置绘制曲线的页面上选择参数的复选框中的条目
def set_checkboxes(parent):
    # 将可绘制的参数添加到复选框中
    clear_checkboxes(parent)
    for i in range(len(parent.curves)):
        checkbox = QCheckBox(parent.curves[i])
        parent.verticalLayout_11.addWidget(checkbox)

    return len(parent.curves)

#清空绘制曲线的页面上选择参数的复选框
def clear_checkboxes(parent):
          # 清空容器中的所有子部件
          while parent.verticalLayout_11.count():
              item = parent.verticalLayout_11.takeAt(0)
              widget = item.widget()
              if widget is not None:
                  widget.deleteLater()


#将las的头部信息展示到parent的控件中
def showHeader(parent,las):
    content=""
    num=1

    #提取头部信息
    for section_name, section_data in las.sections.items():
        content = content + "#"+str(num)+" :  "+str(section_name) + "\n"+str(section_data)+"\n"+"\n\n"
        num=num+1

    #展示到textBrowser中
    parent.textBrowser_headerInfo.setText(content)


#刷新文件列表并新增条目
def refreshFilelist(parent, filePath):
    #文件列表下拉框新增条目
    parent.comboBox_fileList.addItem(filePath)
    #设置当前文件为新增的文件
    parent.comboBox_fileList.setCurrentIndex(parent.comboBox_fileList.count()-1)

# 清空文件列表
def clearFilelist(parent):
    parent.comboBox_fileList.clear()